package zuoye5.第四题;
/**
 * 4. 编程题
 *
 *   使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器；
 *
 *   服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 "admin" 和 "123456"， 若 是则 将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
 *
 *   其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
 *
 *   其中 User 类的特征有：用户名、密码(字符串类型)。
 *
 *   如：
 *
 *                 UserMessage tum = new UserMessage("check", new User("admin", "123456"));
 */
import zuoye5.第四题.User;
import zuoye5.第四题.UserMessage;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerUserTest {
    public static void main(String[] args) {
        ServerSocket ss = null;
        ObjectInputStream ois = null;
        ObjectOutputStream oos = null;
        try {
            //1.创建一个ServerSocket类型的对象并提供端口号
            ss = new ServerSocket(8888);
            //2.等待客户端的连接请求，调用accept方法
            Socket s = ss.accept();
            /*3.使用输入输出流进行通信
            这里使用对象流来接受
            */
            ois = new ObjectInputStream(s.getInputStream());
            UserMessage um = (UserMessage)ois.readObject();
            User u1 = um.getUser();
            if (u1.getPassword().equals("123456")&&u1.getUserName().equals("admin")) {
                um.setType("success");
            }else {
                um.setType("fail");
            }
            oos = new ObjectOutputStream(s.getOutputStream());
            oos.writeObject((Object) um);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //4.关闭服务器
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ss != null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
